package AI;


import java.awt.geom.Area;

import javax.swing.JLabel;

import GAME.game;
import TDALista.BoundaryViolationException;
import TDALista.DoubleLinkedList;
import TDALista.EmptyListException;
import TDALista.InvalidPositionException;
import TDALista.Position;
import TDALista.PositionList;
import weaponrelated.*;
import powerup.*;

public class powerupAI extends Thread {
	protected PositionList<powerup> powerups;
	protected game juego;
	
	public powerupAI(game g){
		powerups=new DoubleLinkedList<powerup>();
		juego=g;
	}

/**
 * Insertar un powerup al juego.
 * @param b powerup a insertar.
 */
	public void insertpowerup(powerup b){
		powerups.addLast(b);
		juego.getpanel().add(b);
		
	}

/**
 * Metodo que se utiliza para mover los powerup dentro del juego y activarlos si es necesario.
 */
	public void run() {
		Position<powerup>[] powerupmuertos=(Position<powerup>[])new Position[100];
		int cantelim=0;
		while(juego.getplayer().isalive()){
			cantelim=0;
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {}
			
			if(!powerups.isEmpty()){
				for(Position<powerup> p:powerups.positions()){
					if(p.element().getY()>juego.getHeight()){
						juego.getContentPane().remove(p.element());
						powerupmuertos[cantelim]=p;
						cantelim++;
					}else{
						p.element().setLocation(p.element().getX(),p.element().getY()+1 );
						if(intersecta(juego.getplayer(),p.element())){
							juego.getpanel().remove(p.element());
							p.element().activarpowerup();
							powerupmuertos[cantelim]=p;
							cantelim++;
						}
				
					}
				}
				for(int i=0;i<cantelim;i++){
					try {
						powerups.remove(powerupmuertos[i]);
					} catch (InvalidPositionException e) {}
					powerupmuertos[i]=null;
					
				}
			} else
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {}
			
		}
	
				
				
				
}

/**
 * Metodo que se utiliza para saber si dos JLabel se intersectan.
 * @param a,b JLabel son los dos JLabel para los cuales se vera si se interceptan.
 * @return Boolean retorna true si se intersectan y false si no lo hacen.
 */
public boolean intersecta(JLabel a, JLabel b){
	    Area areaA = new Area(a.getBounds());
	    Area areaB = new Area(b.getBounds());

	    return areaA.intersects(areaB.getBounds2D());
}			
				
			
}

			
